package com.mlh.expression;

import com.mlh.entity.LoginUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author 缪林辉
 * @date 2024/3/14 21:21
 * @DESCRIPTION
 */
@Component("myExpressionRoot")
public class MyExpressionRoot {
    //自定义权限校验方法
    //权限校验最终返回的结果只有 true和false  即通过不通过
    //因此我们自定义的方法返回boolean类型即可
    public boolean hasAuthority(String authority){
        //从SecurityContextHolder中获取当前用户的权限
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        List<String> permissions = loginUser.getPermissions();
        //判断用户权限集合中是否存在authority
        //这里我们直接使用permissions来判断，因为在我们定义LoginUser中权限信息一开始就是放入到permissions中
        //判断用户的权限是否包含了访问该接口的权限
        return permissions.contains(authority);
    }
}
